import { computed, ref } from 'vue'
import { CustomFormTemplate } from './types'
import _ from 'lodash'

// 模板列表 - 内部使用
const _templates = ref<Array<CustomFormTemplate>>([])

const saveTemplateToBrowserLocal = () => {
  sessionStorage.setItem('orderCustomTemplate', JSON.stringify(_templates.value))
}

export const useSetTemplateFromBrowserLocal = () => {
  try {
    const _templateList = sessionStorage.getItem('orderCustomTemplate')
    if (_templateList) {
      _templates.value = JSON.parse(_templateList)
    }
  } catch (error) {
    // error
  }
}

// 模板列表 - 外部使用
export const templateList = computed(() => {
  return _.cloneDeep(_templates.value)
})

/**
 * 根据搜索条件获取模板列表
 */
export const useGetTemplateList = () => {
  // 获取列表请求参数
  const getListParam = ref({
    keyword: '',
    page: 1,
    limit: 50,
  })

  // 获取列表加载
  const getListLoading = ref(false)

  // 列表总条数
  const listTotal = ref(0)

  // 列表
  const list = ref<Array<CustomFormTemplate>>([])

  /**
   * 获取列表
   */
  const getList = () => {
    getListLoading.value = true
    return new Promise((resolve) => {
      setTimeout(() => {
        getListLoading.value = false
        let result: Array<CustomFormTemplate> = []
        result = _.cloneDeep(_templates.value).filter((template) =>
          template.name.includes(getListParam.value.keyword),
        )
        result = result.slice(
          (getListParam.value.page - 1) * getListParam.value.limit,
          getListParam.value.limit,
        )
        listTotal.value = result.length
        list.value = result
        resolve('')
      }, 500)
    })
  }

  /**
   * 重置搜索条件
   */
  const resetGetListParam = () => {
    Object.assign(getListParam.value, { keyword: '' })
  }

  return {
    list,
    listTotal,
    getListParam,
    getListLoading,
    getList,
    resetGetListParam,
  }
}

/**
 * 添加模板
 * @param {CustomFormTemplate} template - 模板
 */
export const useAddTemplate = (template: CustomFormTemplate) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      _templates.value.push(_.cloneDeep(template))
      saveTemplateToBrowserLocal()
      resolve('')
    }, 500)
  })
}

/**
 * 根据模板id删除模板
 * @param {string} id - 模板id
 */
export const useDelTemplateById = (id: string) => {
  _templates.value = _templates.value.filter((template) => template.id !== id)
  saveTemplateToBrowserLocal()
}

/**
 * 根据模板id查找指定的模板
 */
export const useFindTemplateById = () => {
  // 查找加载
  const findLoading = ref(false)

  // 模板对象
  const template = ref<CustomFormTemplate>({
    id: '',
    name: '',
    status: false,
    createTime: '',
    updateTime: '',
    numberColumnOfEachRow: 1,
    componentList: [],
    processList: [],
  })

  /**
   * 查找
   * @param {string} templateId - 模板id
   */
  const findTemplate = (templateId: string) => {
    if (_templates.value.length <= 0) {
      useSetTemplateFromBrowserLocal()
    }
    const findResult = _templates.value.find((template) => template.id === templateId)
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        if (findResult) {
          template.value = findResult
          resolve('')
        } else {
          reject('')
        }
      }, 600)
    })
  }

  return {
    template,
    findLoading,
    findTemplate,
  }
}

/**
 * 根据模板更新模板列表
 * @param {CustomFormTemplate} template - 模板对象
 */
export const useUpdateTemplateById = (template: CustomFormTemplate) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      const index = _templates.value.findIndex((item) => item.id === template.id)
      if (index >= 0) {
        _templates.value[index] = template
        saveTemplateToBrowserLocal()
      }
      resolve('')
    }, 500)
  })
}
